Devices for displaying or printing graphics, such as Liquid Crystal Displays (LCDs), Cathode Ray Tubes (CRTs), printers, and other devices are typically not able to generate the full range of colors that may be perceived by a user. For example, while a monitor may be able to display the color red, it may not be able to display a particular deep red.
Furthermore, various conditions may alter the appearance of colors to a human viewer. For example, a particular color displayed on a monitor in a darkened room may appear differently than the same color displayed in a sunlit room. As another example, the colors in a photograph may appear differently depending on whether the photograph is printed on glossy or matte paper.
When a device prints or displays an image, a color engine may be used to determine which colors should be output by the device. However, such color engines are typically monolithic, and are typically opaque to users, to hardware manufacturers, and to developers of third-party software. Such color engines are implemented as “black boxes” that cannot be altered or optimized for a particular application or hardware component. For example, a manufacturer of a printer may specify that the printer use the color engine included in a particular operating system, such as the color engine included in the Windows operating system. Alternatively, the manufacturer may specify that another third-party color engine be used, or may elect to design a color engine specifically for the printer. The manufacturer does not have the option to replace selected portions of a color engine, or to specify parameters that allow a color engine to be optimized for the printer.